package concursos.controladores;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.CellEditEvent;
import org.primefaces.event.RowEditEvent;

import concursos.interfaces.ConteudoService;
import concursos.interfaces.DisciplinaService;
import concursos.modelos.Conteudo;
import concursos.modelos.Disciplina;
import concursos.modelos.Usuario;

@ManagedBean
@SessionScoped
public class InserirConteudoMB {

	@EJB
	private ConteudoService beanConteudo;
	@EJB
	private DisciplinaService beanDisciplina;
	private List<Conteudo> listaConteudos = new ArrayList<Conteudo>();
	private int idBusca, idExclusao;
	private Conteudo conteudo = new Conteudo();
	private Conteudo conteudoSelecionado = new Conteudo();
	private Disciplina disciplinaSelecionada;
	private int id;
	private int id_usuario;

	public InserirConteudoMB() {
		Usuario usuario;
		Object user = (Usuario) FacesContext.getCurrentInstance().getExternalContext()
				.getSessionMap().get("usuario");

		usuario = (Usuario) user;
		this.id_usuario = usuario.getId();
	}

	public void cadastrarConteudo() {
		if (this.conteudoSelecionado.getId() != 0) {
			if (this.conteudoSelecionado.isEstudado())
				this.conteudoSelecionado.setEstudado(false);
			else
				this.conteudoSelecionado.setEstudado(true);
			
			this.beanConteudo.salvarConteudo(this.conteudoSelecionado);
			this.conteudoSelecionado = new Conteudo();
			
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage("Sucesso",
					"Conteudo atualizado com sucesso"));
		} else {
			this.conteudo.setDisciplina(this.disciplinaSelecionada);
			this.beanConteudo.salvarConteudo(this.conteudo);
			this.conteudo = new Conteudo();

			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage("Sucesso",
					"Conteudo inserido com sucesso"));
		}
		
	}

	public Disciplina getDisciplinaSelecionada() {
		return disciplinaSelecionada;
	}

	public void setDisciplinaSelecionada(Disciplina disciplinaSelecionada) {
		this.disciplinaSelecionada = disciplinaSelecionada;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public List<Disciplina> getListaDisciplina() {
		return new ArrayList<Disciplina>(this.beanDisciplina.listarDisciplina(this.id_usuario));
	}

	public void selecionarConteudo(Conteudo c) {
		this.conteudoSelecionado = new Conteudo();
		this.conteudoSelecionado = c;
	}

	public void excluirConteudo() {
		this.beanConteudo.excluirConteudo(this.conteudoSelecionado);

		FacesContext context = FacesContext.getCurrentInstance();
		context.addMessage(null, new FacesMessage("Sucesso",
				"Conteudo excluido com sucesso"));

		this.conteudoSelecionado = new Conteudo();
		this.buscarConteudoPorDisciplina();
	}

	public List<Conteudo> listarConteudos() {
		this.listaConteudos = this.beanConteudo.listarConteudo(this.id_usuario);
		return this.listaConteudos;
	}

	public void buscarConteudoPorDisciplina() {
		if (this.id == 0) {
			this.listaConteudos = this.beanConteudo.listarConteudo(this.id_usuario);
		} else
			this.listaConteudos = this.beanConteudo
					.buscarPorDisciplina(this.id);

		try {
			FacesContext.getCurrentInstance().getExternalContext()
					.redirect("detalhesDisciplina.xhtml");
		} catch (IOException exception) {
		}
	}

	public void buscaPorId() {
		this.conteudo = this.beanConteudo.buscaPorId(idBusca);
	}

	public ConteudoService getBeanConteudo() {
		return beanConteudo;
	}

	public void setBeanConteudo(ConteudoService beanConteudo) {
		this.beanConteudo = beanConteudo;
	}

	public DisciplinaService getBeanDisciplina() {
		return beanDisciplina;
	}

	public void setBeanDisciplina(DisciplinaService beanDisciplina) {
		this.beanDisciplina = beanDisciplina;
	}

	public Conteudo getConteudo() {
		return conteudo;
	}

	public void setConteudo(Conteudo conteudo) {
		this.conteudo = conteudo;
	}

	public int getIdBusca() {
		return idBusca;
	}

	public void setIdBusca(int idBusca) {
		this.idBusca = idBusca;
	}

	public int getIdExclusao() {
		return idExclusao;
	}

	public void setIdExclusao(int idExclusao) {
		this.idExclusao = idExclusao;
	}

	public List<Conteudo> getListaConteudos() {
		return listaConteudos;
	}

	public void setListaConteudos(List<Conteudo> listaConteudos) {
		this.listaConteudos = listaConteudos;
	}

	public void addMessage() {
		String summary = conteudo.isEstudado() ? "Estudado" : "N�o estudado";

		FacesContext.getCurrentInstance().addMessage(null,
				new FacesMessage(summary));
	}

	public void selecionarDisciplina(Disciplina disciplina) {
		this.disciplinaSelecionada = new Disciplina();
		setDisciplinaSelecionada(disciplina);
	}

	public Conteudo getConteudoSelecionado() {
		return this.conteudoSelecionado;
	}

	public void setConteudoSelecionado(Conteudo conteudoSelecionado) {
		this.conteudoSelecionado = conteudoSelecionado;
	}
	
	public void onEdit(RowEditEvent event) {
		this.beanConteudo.salvarConteudo((Conteudo) event.getObject());
		FacesContext context = FacesContext.getCurrentInstance();
		context.addMessage(null, new FacesMessage("Sucesso",
				"Conteudo alterado com sucesso"));
	}

}
